﻿// 4610. 列表排序.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
/*
https://www.acwing.com/problem/content/4613/

给定一个 n
 行 m
 列的整数列表。

列表中每一行的 m
 个整数都是一个 1∼m
 的排列。

现在，你可以对该列表执行以下两种操作：

选择一行中的两个整数并交换它们。此操作，每行最多只能执行一次。
选择列表中的两列并交换它们。此操作，最多只能执行一次。
不难发现，你最多可以进行 n+1
 次操作，最少可以进行 0
 次操作，所有操作的具体执行顺序随意。

我们的目标是，通过执行上述操作，使得最终列表中每一行的 m
 个整数都能按照 1,2,…,m
 的顺序排列。

请你判断，目标是否能够达成。

输入格式
第一行包含两个整数 n,m
。

接下来 n
 行，每行包含 m
 个整数，用来表示整数列表。保证每行的 m
 个整数都是一个 1∼m
 的排列。

输出格式
如果目标能够达成，则输出 YES，否则输出 NO。

数据范围
前 6
 个测试点满足 1≤n,m≤10
。
所有测试点满足 1≤n,m≤20
。

输入样例1：
2 4
1 3 2 4
1 3 4 2
输出样例1：
YES
输入样例2：
4 4
1 2 3 4
2 3 4 1
3 4 1 2
4 1 2 3
输出样例2：
NO
输入样例3：
3 6
2 1 3 4 5 6
1 2 4 3 5 6
1 2 3 4 6 5
输出样例3：
YES
*/
#include <iostream>

int main()
{
    std::cout << "Hello World!\n";
}

 